草庐IT

Python struct.calcsize 长度

全部标签

sockets - Erlang gen_tcp :recv(Socket, 长度)语义

看完thisanswer,我想了解是否同样适用于对gen_tcp:recv(Socket,Length)的调用。我对文档的理解是,如果缓冲区中有超过Length个字节可用,它们将保留在那里;如果少于Length字节,调用将阻塞,直到有足够的可用字节或连接关闭。特别是,当数据包以2个字节为前缀以小端顺序保存数据包长度时,这应该有效:receive_packet(Socket)->{ok,>}=gen_tcp:recv(Socket,2),gen_tcp:recv(Socket,Length).这是正确的吗? 最佳答案 是(或否,详见评

tcp - 在 TCP 连接中,发送的长度是否与接收的长度匹配达到某个限制?

我想知道当大小传递给send()时TCP/IP连接中会发生什么成长。在一个简单的TCP/IP连接中(默认属性,没有TCP/IP没有修复的错误),是否保证传入的大小send()将是recv()中的尺寸,也许达到某个极限?如果是,是否可以确定这个限制? 最佳答案 每个send()发送的数据大小可能与每个recv()不匹配,因为接收方不知道消息的大小。例如:一条100字节的消息可以分10个block或单次发送100字节。关于问题的第二部分,发送缓冲区的最大大小可以通过一个简单的调用来确定:intsockbufsize=0;大小=sizeo

tcp - 如何处理 Erlang 中 TCP 流中数据包的错误长度 header ?

我正在使用gen_tcp在Erlang中通过TCP接收消息。根据{packet,4}选项的指定,流通过使用4字节长度的header分成数据包。这就是我调用gen_tcp:listen/2的方式:gen_tcp:listen(Port,[binary,inet,{active,once},{packet,4}]).如您所见,我使用了{active,once}选项,这样我就可以从进程邮箱中获取我的数据包,而不会淹没它。只要长度header正确,这就可以正常工作。如果不是,任何事情都可能发生。所以我想以某种方式处理错误数据包的可能性。这有点棘手,因为我实际上是在处理流。忽略错误的数据包是可以

c - libpcap - 数据包 ip header 长度为零字节,带有环回 tcp 请求

我正在尝试使用libpcap查看TCP负载信息。为此,我需要找到负载在内存中的位置。我正在使用这个ProgrammingWithPcap指南找出请求负载的位置。当嗅探来自与服务(环回适配器)位于同一台机器上的客户端的数据包时,IPheader长度为0。我无法成功找到请求负载的位置。收听环回适配器时是否会出现这种情况?我正在使用MacOSx10.8系统监听适配器“lo0”。这是我正在尝试的://thiscallbackiscalledwhenapacketisfoundvoidgot_packet(u_char*args,conststructpcap_pkthdr*header,con

java - 使用 JMeter TCP Sampler 是否可以使用响应的第一个字节来确定消息长度

我需要一些帮助来使用消息的第一个字节来识别响应的长度。目前正在使用JMeter发送一些TCP请求,但遗憾的是它无法确定消息的结尾,因此挂起。通信协议(protocol)是GoogleProtobufs(ProtocolBuffer),没有判断消息结束的指标。以下是Jmeter的内容。如果有人能告诉我如何在此基础上构建,以便我可以使用响应的第一个字节来测量消息的长度,我将不胜感激。JMETER-读取方法。publicStringread(InputStreamis)throwsReadException{ByteArrayOutputStreamw=newByteArrayOutputS

linux - 抓包长度大于MTU

我在两台机器(linux)之间运行iperf,我可以观察到连接的两个接口(interface)的mtu都是1500。我运行tcpdump来捕获数据包,我观察到一些数据包有“长度为2962”...为什么只有1500的mtu是可能的?请澄清。谢谢!注意:flags字段设置为DF。proto是TCP 最佳答案 关闭gso(在linux中)就可以了引用:http://lists.openwall.net/netdev/2008/11/14/20 关于linux-抓包长度大于MTU,我们在Stac

c - 在 Tshark 中检查数据包时伪造的 TCP header 长度

我试图发送一个TCPSYN通过端口8000将数据包发送到我机器上的服务器.然后,我想检查服务器是否响应SYNACK.如果是这种情况,那么我会发回RST数据包中止连接。然而,当我嗅到SYN我发出的数据包告诉我TCPheader的伪造长度为0,但事实并非如此。我使用的嗅探器是tshark,顺便一提。这是我的代码:在main功能,我运行这个:FLAGSf=SYN;tcp_scan("127.0.0.1",8000,f,0);此函数组装IPheader:structiphdr*assemble_ip(char*dest,unsignedintproto){/*AssembleIPLayer*/

c - 通过 TCP 套接字发送多条任意长度数据的正确技术

我很好奇在C中通过套接字发送多条任意长度数据的正确方法。例如,如果要发送任意长度的“用户名”、任意长度的“主题”和任意长度的“消息”发送这些消息的正确过程是什么。此外,我尝试发送的数据可能不一定以空值结尾,因此我认为我无法仅基于空字节正确地重新组装它。我想出的方法包括读取服务器上接收到的输入的前4个字节并将其解释为第一条数据的大小,然后从套接字中读取该数据量并将其解释为第一个字符串,再读取4个字节并将其解释为第二个字符串的长度,然后准确读取那么多字节并将其解释为第二个字符串,依此类推。然而,这似乎很容易出错,或者有一些可能导致事情出错的实现细节。有没有更好的方法来完成这个?

python - Twisted > 如何读取比 TCP 帧长度更长的 TCP 消息,例如来自窗口 TCP 客户端的 1380 字节

我正在编写一个扭曲的服务器来读取最大64KB的TCP消息。我发现mtdatareciever被linereciever类每1380字节调用一次,结果是Windows客户端的TCP帧大小。有没有一种方法可以解决这个问题而不必遍历这些1380字节的block?fromtwisted.internet.protocolimportProtocolfromtwisted.internet.protocolimportFactoryfromtwisted.enterprise.adbapiimportConnectionPoolclassCSVReceiver(Protocol):defdata

xml - 通过 TCP 套接字发送可变长度数据

我的应用程序需要通过tcp套接字发送/接收xml数据。无法包含任何类型的包含消息长度的固定长度header。据我了解,通过tcp传输的数据可以像这样到达接收方。ge>>嗨但不知何故,这永远不会发生,这意味着通过一次Send()操作发送的数据(假设它小于或等于套接字缓冲区大小)总是通过一次Receive()操作完全读取。如果端点的套接字缓冲区足够大并且从未超过,是否可能出现上述情况? 最佳答案 是的,这是可能的。你真的不能假设一侧的send()操作中的缓冲区边界与另一端相应的recv()所看到的缓冲区边界匹配,即使大多数情况下看起来是